package io;

/**
 * @author weim
 * @date 18-8-28
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
/**
 * 转换流
 * java 提供了两个转换流    用于实现将字节流转换成字符流
 * InputStreamReader  将字节输入流转换成字符输入流
 * OutputStreamWriter 将字节输出流转换成字符输出流
 *这两个流本身就是字符流
 *
 * 字节流操作的数据单元是8位的字节
 * 字符流操作的数据单元是16位的字符
 * 字节流和字符流都输与节点流                 节点流的的构造器参数是一个物理节点   比如一个文件
 * 处理流             构造参数是一个 节点流
 */

public class ReadWrite3 {

    public static void main(String[] args) throws IOException {

        //readWrite1();
        System.out.println("---------------------------------");
        //readWrite2();
        System.out.println("---------------------------------");
    }
    //java 使用System.in代表标准输入（键盘输入） 该输入流是InputStream的实例    是字节流
    //键盘输入内容都是文本内容   使用InputStreamReader将字节流转换成字符流
    public static void readWrite1() throws IOException{
        //将System.in对象转换成Reader对象      字节流转换成字符流
        InputStreamReader input = new InputStreamReader(System.in);
        //再次封装成BufferedReader 对象        方便操作
        BufferedReader buffer = new BufferedReader(input);

        //将System.out对象转换成Reader对象      字节流转换成字符流
        OutputStreamWriter out = new OutputStreamWriter(System.out);
        //再次封装成BufferedReader 对象        方便操作
        //BufferedWriter bufout = new BufferedWriter(out);

        String line = null;
        //BufferedReader流具有缓冲功能   一次读取一行文本  以换行符为标志
        //没有读到换行符  程序阻塞  不会输出        读取到才会输出
        while ((line = buffer.readLine()) != null) {
            out.write(line);
            //使用flush 将流里的缓冲数据输出
            out.flush();

            //bufout.write(line);
            //bufout.flush();
        }
        out.close();
        //bufout.close();
        buffer.close();
        input.close();
    }
    //使用Scanner 一个简单的文本扫描器，它可以使用正则表达式解析原始类型和字符串。
    //扫描仪打破它的输入令牌使用分隔符模式，默认匹配空格。然后，使用不同的下一个方法，将所得的令牌转换为不同类型的值。
    @SuppressWarnings("resource")
    public static void readWrite2() throws IOException{
//		Scanner sc = new Scanner(System.in);
//		System.out.println(sc.nextInt());

//		Scanner sc1 = new Scanner(new File("D:\\MyExecutorService.txt"));
//		while (sc1.hasNextLine()) {
//			System.out.println(sc1.nextLine());
//		}

        String input = "1 fish 2 fish red fish blue fish";
        Scanner sc2 = new Scanner(input).useDelimiter("\\s*fish\\s*");
        System.out.println(sc2.nextInt());
        System.out.println(sc2.nextInt());
        System.out.println(sc2.next());
        System.out.println(sc2.next());
        sc2.close();
		/*1
    	  2
		  red
		  blue
		 */

    }
}